#ifndef XMESH_SPARSE_MATRIX_H
#define XMESH_SPARSE_MATRIX_H


#include "collection.h"

namespace math 
{

template <typename matrix_type> struct matrix_traits 
{
	typedef typename matrix_type::value_type value_type ;
} ;


/**
 * Define the sparse matrix. 
 */
template <typename value_, unsigned row, unsigned col> class sparse_matrix  ;

template <typename value_, unsigned row, unsigned col> class sparse_matrix  
{
public:
	typedef value_ value_type; 

private:
	typedef std::pair<unsigned, unsigned> key_type ; 
private:
	std::unordered_map <key_type, value_type> m_elements; 
};

template <typename value_type, unsigned row, unsigned col >
	sparse_matrix <value_type, row, col> operator + (const sparse_matrix <value_type, row, col> & lhs, const sparse_matrix <value_type, row, col> & rhs)
{
}

template <typename value_type, unsigned row, unsigned col >
	sparse_matrix <value_type, row, col> operator - (const sparse_matrix <value_type, row, col> & lhs, const sparse_matrix <value_type, row, col> & rhs)
{
}

template <typename value_type, unsigned row, unsigned col1, unsigned col2>
	sparse_matrix <value_type, row, col2> operator * ( const sparse_matrix <value_type, row, col1> & lhs, const sparse_matrix <value_type, col1, col2> & rhs)
{
}


}
#endif
